﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel;

using RemotingInterfaces;

namespace Model.Hero
{
    [Serializable]
    public abstract class Base_Stats : MarshalByRefObject, IBase_Stats
    {
        //strenght: affects damage from melee weapons
        //vitality: affects health
        //intellect: affects spells: spell intensity, number of spells memorized, maximum level learned
        //perception: increased chance to spot traps and hidden doors. increased attack power with ranged weapons
        //agility: increased defense rating, increased chance to avoid damage from traps when triggered, increased attack power with ranged weapons
        //increased critical hit rating
        //luck: primarily affects critical hit chance. affects almost anything!!
        protected int _strength, _vitality, _intellect, _perception, _agility, _luck, _health, _attack_rating, _defense_rating;        

        public Base_Stats() { }

        public Base_Stats(int str, int vit, int _int, int per, int agi)
        {
            _strength = str;
            //be careful with vitality as it controls the starting health of an NPC/hero
            _vitality = vit;
            _intellect = _int;
            _perception = per;
            _agility = agi;
        }

        public int Strength
        {
            get { return _strength; }
            set { _strength = value; }
        }

        public int Vitality
        {
            get { return _vitality; }
            set { _vitality = value; }
        }

        public int Intellect
        {
            get { return _intellect; }
            set { _intellect = value; }
        }

        public int Perception
        {
            get { return _perception; }
            set { _perception = value; }
        }

        public int Agility
        {
            get { return _agility; }
            set { _agility = value; }
        }

        public int Luck
        {
            get { return _luck; }
            set { _luck = value; }
        }

        public int Health
        {
            get { return _health; }
        }

        public int Attack_Rating
        {
            get { return _attack_rating; }
        }

        public int Defense_Rating
        {
            get { return _defense_rating; }
        }
    }
}
